home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / dev / c / ExtrasLib.lha / ExtrasLib / Source / GTLIB / MxGetSize.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-30  |  1.7 KB  |  87 lines

  1. #include <utility/pack.h>
  2. #include <extras/gtobject.h>
  3.  
  4. ULONG MX_GetSize(struct gtpGetSize *GS)
  5. {
  6.   struct IBox domain;
  7.   struct TagItem *tags;
  8.   struct TextAttr *ta;
  9.   struct mxData *gd;
  10.   struct TextFont *font;
  11.   STRPTR *labels;
  12.   LONG  flags,
  13.         labelcnt, 
  14.         spacing, 
  15.         scaled, 
  16.         tplace,
  17.         mxw,
  18.         mxh;
  19.   
  20.   gd=INST_DATA(C,O);
  21.   
  22.   tags=GS->gtpgs_TagList;
  23.   
  24.   flags      = GetTagData(GTA_Flags,         0, tags);
  25.   ta         = GetTagData(GTA_TextAttr,      0, tags);
  26.   labels     = GetTagData(GTMX_Labels,       0, tags);
  27.   labelcnt   = CountStringArray(labels);
  28.  
  29.   spacing    = GetTagData(GTMX_Spacing,      0, tags);
  30.  
  31.   scaled=0;
  32.   tplace=0;
  33.  
  34.   if(GadToolsBase->lib_Version>=39)
  35.   {
  36.     scaled  =GetTagData(GTMX_Scaled,      0, tags);
  37.     tplace  =GetTagData(GTMX_TitlePlace,  0, tags);
  38.   }
  39.  
  40.   mxw=17;
  41.   mxh=9;
  42.  
  43.   if(labels)
  44.   {
  45.     if(font=OpenDiskFont(ta))
  46.     {
  47.       maxlabellen=0;
  48.       
  49.       if(scaled)
  50.       {
  51.         mxh=font->tf_YSize+1;
  52.         mxw=max(17,mxh);
  53.       }
  54.       
  55.       while(*labels)
  56.       {
  57.         LONG lablen;
  58.         
  59.         lablen=StrLength( SL_TextFont,    font,
  60.                           SL_String,      *labels,
  61.                           TAG_DONE);
  62.         maxlabellen=max(maxlabellen,labellen);
  63.         labels++;
  64.       }
  65.       
  66.       domain.Width  = mxw + 8 + malabellen;
  67.       domain.Height = (mxh + spacing) * labelcnt - spacing;
  68.       
  69.       if(flags & PLACETEXT_LEFT)
  70.         domain.Left-=maxlabellen;
  71.       else
  72.         domain.Left=0;
  73.       
  74.       domain.Top=0;
  75.       
  76.       CloseFont(font);
  77.     }
  78.   }
  79.   
  80.   GS->gtpgs_Domain[0]=domain;
  81.   GS->gtpgs_Domain[1]=domain;
  82.   GS->gtpgs_Domain[2]=domain;
  83.  
  84.   return(1);
  85. }
  86.  
  87.